我們在day2的時後,就有介紹到如何使用$match搜尋想要的資料,今天要再更深入的介紹可以和$match一起搭配的相關操作符。
例如:有一個collection score專門紀錄學生各科的成績,我們可以用$gt(大於)、$gte(大於等於)、$lt(小於)、$lte(小於等於),來選取我們要的成績範圍。
學生資料
  { student_id: 1, math: 100, english: 80 },
  { student_id: 2, math: 30, english: 90 },
  { student_id: 1, math: 70, english: 20 }
如果我們想要找學生成績範圍, 20 ≤ math < 90、 60 < english ≤ 100
可以下這樣的指令
score.aggregate([
  {
    $match: { 
      math: { $gte: 20, $lt: 90 }, 
      english: { $gt: 60, $lte: 100 } 
    }
  }
]);
最後得到這一筆資料
  { student_id: 2, math: 30, english: 90 }
如果是不想要特定的資料,比如說不要數學考100分的學生資料,這時候就會使用$ne(不等於)。
score.aggregate([
  {
    $match: { math: { $ne: 100 } }
  }
]);
最後得到這兩筆資料
  { student_id: 2, math: 30, english: 90 },
  { student_id: 1, math: 70, english: 20 }
或是我們希望特定數學成績資料,比如說要數學分數考100和30分的學生資料,這時候就會使用$in,後面接著一個陣列,陣列裡面寫入我們想要找的值。
score.aggregate([
  {
    $match: { math: { $in: [100, 30] } }
  }
]);
ps:如果是不想要特定的數值,可以改用$nin,用法和$in相似。
本篇文章同步放在我的部落格,大家有空可以進來逛逛